﻿@{
    ViewBag.Title = "状态模式";
}

@section Styles{
    @Stylesheet.Render("prettify")
    @Stylesheet.Render("lhgdialog")
}

<div class="row">
    <div class="col-md-12">
        <h2>状态模式</h2>
        <dl class="dl-horizontal">
            <dt>概念</dt>
            <dd>当一个对象的内在状态改变时允许改变其行为，这个对象看起来是像是改变了其类。</dd>
            <dt>解决问题</dt>
            <dd>主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。</dd>
            <dt>用法</dt>
            <dd>把状态的判断逻辑转移到表示不同状态的一系列类当中，可以把复杂的判断逻辑简化。</dd>
            <dt>好处</dt>
            <dd>将与特定状态相关的行为局部化，并且将不同状态的行尾行为分割开来。</dd>
            <dt>适用场景</dt>
            <dd>当一个对象的行为取决于它的状态，并且它必须在运行时刻根据状态改变它的行为时。</dd>
        </dl>
    </div>
</div>
<div class="row">
    <div class="col-md-12">
        结构图<br />
        <img class="img-rounded" alt="状态模式" src="~/Content/大话设计模式/状态模式/UML.png" />
    </div>
</div>
<div class="row">
    <div class="col-md-12">
        &nbsp;
    </div>
</div>
<div class="row">
    <div class="col-md-12">
        <ul class="nav nav-tabs">
            <li class="active dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">Client.aspx <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <li><a href="#Client" data-toggle="tab">Client.aspx</a></li>
                    <li><a href="#ClientCode" data-toggle="tab">Client.aspx.cs</a></li>
                </ul>
            </li>
            <li><a href="#State" data-toggle="tab">State.cs</a></li>
            <li><a href="#Context" data-toggle="tab">Context.cs</a></li>
            <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">State子类 <b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <li><a href="#Online" data-toggle="tab">Online.cs</a></li>
                    <li><a href="#Offline" data-toggle="tab">Offline.cs</a></li>
                    <li><a href="#Leave" data-toggle="tab">Leave.cs</a></li>
                </ul>
            </li>
        </ul>
        <div class="tab-content">
            <div class="tab-pane active" id="Client">
                <div class="pretty" data-type="aspx" data-code="大话设计模式-状态模式Client"></div>
            </div>
            <div class="tab-pane" id="ClientCode">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式Client.aspx"></div>
            </div>
            <div class="tab-pane" id="State">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式-State"></div>
            </div>
            <div class="tab-pane" id="Context">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式-Context"></div>
            </div>
            <div class="tab-pane" id="Online">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式-Online"></div>
            </div>
            <div class="tab-pane" id="Offline">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式-Offline"></div>
            </div>
            <div class="tab-pane" id="Leave">
                <div class="pretty" data-type="cs" data-code="大话设计模式-状态模式-Leave"></div>
            </div>
        </div>
    </div>
</div>
<div class="row">
    <div class="col-md-12">
        网摘：http://developer.51cto.com/art/201208/354916.htm <br />
        <iframe width="100%" height="500px" frameborder="0" src="http://developer.51cto.com/art/201208/354916.htm"></iframe>
    </div>
</div>

@section Scripts{
    @Javascript.Render("prettify")
    @Javascript.Render("lhgdialog")
}